package com.atguigu.gmall.product.service;

import com.atguigu.gmall.model.product.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author mqx
 * @date 2020-11-30 10:50:47
 */
public interface ManageService {

    //  先查询所有的一级分类数据
    List<BaseCategory1> findAll();

    //  根据一级分类Id 查询二级分类数据
    List<BaseCategory2> getCategory2(Long category1Id);

    //  根据二级分类Id 查询三级分类数据
    List<BaseCategory3> getCategory3(Long category2Id);

    //  根据分类Id 查询平台属性
    List<BaseAttrInfo> getAttrInfoList(Long category1Id,Long category2Id,Long category3Id);

    /**
     * 大保存 平台属性+平台属性值
     * @param baseAttrInfo
     */
    void saveAttrInfo(BaseAttrInfo baseAttrInfo);

    /**
     * 根据平台属性Id 获取平台属性值集合
     * @param attrId
     * @return
     */
    List<BaseAttrValue> getAttrValueList(Long attrId);


    /**
     * 根据平台属性Id 获取平台属性对象
     * @param attrId
     * @return
     */
    BaseAttrInfo getBaseAttrInfo(Long attrId);

    /**
     *
     * @param spuInfoPage
     * @param spuInfo
     * @return
     */
    IPage getSpuInfoPage(Page<SpuInfo> spuInfoPage,SpuInfo spuInfo);


    /**
     * 获取销售属性集合
     * @return
     */
    List<BaseSaleAttr> getBaseSaleAttrList();

//    spu大保存
    void saveSpuInfo(SpuInfo spuInfo);

    //回显图片
    List<SpuImage> getSpuImageList(Long spuId);

    //    http://api.gmall.com/admin/product/spuSaleAttrList/17
//    回显销售属性 根据SpuID 获取销售属性，销售属性值
    List<SpuSaleAttr> getSpuSaleAttrList(Long spuId);

    //  http://api.gmall.com/admin/product/saveSkuInfo
    //大保存
    void saveSkuInfo(SkuInfo skuInfo);
//分页查询
    IPage getSkuInfoList(Page<SkuInfo> skuInfoPage);
    //  商品上架
    //  http://api.gmall.com/admin/product/onSale/{skuId}
    void onSale(Long skuId);

    //  商品下架
    //  http://api.gmall.com/admin/product/cancelSale/{skuId}
    void cancelSale(Long skuId);


    /**
     * 根据skuId 查询skuInfo
     * @param skuId
     * @return
     */
    SkuInfo getSkuInfo(Long skuId);

    /**
     * 通过三级分类id查询分类信息
     * @param category3Id
     * @return
     */
    BaseCategoryView getCategoryViewByCategory3Id(Long category3Id);

    /**
     * 获取sku最新价格
     * @param skuId
     * @return
     */
    BigDecimal getSkuPrice(Long skuId);
    /**
     * 根据spuId，skuId 查询销售属性集合
     * @param skuId
     * @param spuId
     * @return
     */
    List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(Long skuId, Long spuId);
}
